package com.hxzy.config.security;

import cn.hutool.core.util.StrUtil;
import com.hxzy.vo.AdminLoginVO;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

/**
 * spring security自定义注解认证
 * 功能描述
 *
 * @author tonneyyy
 */
@Component(value = "nb")
public class NewBeeAuthorityBean {

    /**
     * 代表拥有所有权限
     */
    private final static String ALL_PERMISSION="*:*:*";

    /**
     * 超级管理员标识
     */
    private final static String ADMIN_ROLE="admin";

    /**
     * 判断是否拥有某个角色
     * @param role
     * @return
     */
    public boolean hasRole(String role){
        //没有权限
        if(StrUtil.isBlank(role)){
            return false;
        }
        AdminLoginVO adminLoginVO= SecurityUtil.getAdminLoginVO();
        //如果是超级管理员账户，设定任何字符串都是有效的
        if(adminLoginVO.getRoleSet().contains(ADMIN_ROLE)){
            return true;
        }
        return adminLoginVO.getRoleSet().contains(role);
    }

    /**
     * 判断只要拥有某一个角色就可以
     * @param roles ，字符使用,号隔开
     * @return
     */
    public boolean hasAnyRole(String... roles){
        //如果没有值
        if(roles==null || roles.length==0){
            return false;
        }
        boolean exists=false;
        for(String s : roles){
            if(hasRole(s)){
                exists=true;
                break;
            }
        }
        return exists;
    }

    /**
     * 判断是否拥有某个菜单的权限
     * @param permiss
     * @return
     */
    public boolean hasPermiss(String permiss){
        //没有权限
        if(StrUtil.isBlank(permiss)){
            return false;
        }
        AdminLoginVO adminLoginVO= SecurityUtil.getAdminLoginVO();
        //超级管理员
        if(adminLoginVO.getPermissionSet().contains(ALL_PERMISSION)){
            return true;
        }

        return adminLoginVO.getPermissionSet().contains(permiss);
    }

    /**
     * 判断只要拥有某一个菜单权限就可以
     * @param permiss
     * @return
     */
    public boolean hasAnyPermiss(String ... permiss){
        //如果没有值
        if(permiss==null || permiss.length==0){
            return false;
        }
        boolean exists=false;
        for(String s : permiss){
            if(hasPermiss(s)){
                exists=true;
                break;
            }
        }
        return exists;
    }
}
